home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / lib / tex / inputs / nar.bst < prev    next >
Text File  |  1991-05-20  |  20KB  |  1,028 lines

  1. % new.bst
  2. % nar.bst was created by Tom Schneider from unsrt.bst
  3. % version = 3.04 of nar.bst 1990 May 23
  4. %  Tom Schneider
  5. %  National Cancer Institute
  6. %  Laboratory of Mathematical Biology
  7. %  Frederick, Maryland
  8. %  toms@ncifcrf.gov
  9.  
  10. % BibTeX standard bibliography style `unsrt'
  11.     % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
  12.     % Copyright (C) 1985, all rights reserved.
  13.     % Copying of this file is authorized only if either
  14.     % (1) you make absolutely no changes to your copy, including name, or
  15.     % (2) if you do make changes, you name it something other than
  16.     % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
  17.     % This restriction helps ensure that all standard styles are identical.
  18.     % The file btxbst.doc has the documentation for this style.
  19.  
  20. ENTRY
  21.   { address
  22.     author
  23.     booktitle
  24.     chapter
  25.     edition
  26.     editor
  27.     howpublished
  28.     institution
  29.     journal
  30.     key
  31.     month
  32.     note
  33.     number
  34.     organization
  35.     pages
  36.     publisher
  37.     school
  38.     series
  39.     title
  40.     type
  41.     volume
  42.     year
  43.   }
  44.   {}
  45.   { label }
  46.  
  47. INTEGERS { output.state before.all mid.sentence after.sentence after.block
  48.            doblank straightnames}
  49.  
  50. FUNCTION {init.state.consts}
  51. { #0 'before.all :=
  52.   #1 'mid.sentence :=
  53.   #2 'after.sentence :=
  54.   #3 'after.block :=
  55.  
  56.   #0 'doblank := % put a blanks in output.nonnul if not zero
  57.   #0 'straightnames := % force names to be J. B. Smith if not zero
  58.                        % otherwise they are Smith, J. B.
  59. }
  60.  
  61. STRINGS { s t }
  62.  
  63. FUNCTION {between}
  64. { % what to do between output items TDS (AVOID COMMAS)
  65.    doblank #0 =
  66.    {" " * write$}
  67.    {write$}
  68.    if$
  69. }
  70.  
  71. FUNCTION {output.nonnull}
  72. { 's :=
  73.   output.state mid.sentence =
  74. %    { ", " * write$ } % TDS NO COMMAS!!!
  75.     {
  76.      between
  77.     }
  78.  
  79.     { output.state after.block =
  80.     {
  81. %         add.period$ write$ % TDS NO PERIODS!
  82.           write$ % TDS NO PERIODS!
  83.       newline$
  84. %      "\newblock " write$ % TDS NO NEWBLOCKS: makes for a cleaner file
  85.     }
  86.     { output.state before.all =
  87.         'write$
  88. %        { add.period$ " " * write$ } % TDS NO PERIODS!!!
  89. %        { " " * write$ } % TDS NO PERIODS!!!
  90.             {between}
  91.       if$
  92.     }
  93.       if$
  94.       mid.sentence 'output.state :=
  95.     }
  96.   if$
  97.   s
  98. }
  99.  
  100. FUNCTION {output}
  101. { duplicate$ empty$
  102.     'pop$
  103.     'output.nonnull
  104.   if$
  105. }
  106.  
  107. FUNCTION {output.check}
  108. { 't :=
  109.   duplicate$ empty$
  110.     { pop$ "empty " t * " in " * cite$ * warning$ }
  111.     'output.nonnull
  112.   if$
  113. }
  114.  
  115. FUNCTION {output.bibitem}
  116. { newline$
  117.   "\bibitem{" write$
  118.   cite$ write$
  119.   "}" write$
  120.   newline$
  121.   ""
  122.   before.all 'output.state :=
  123. }
  124.  
  125. FUNCTION {fin.entry}
  126. { add.period$
  127.   write$
  128.   newline$
  129. }
  130.  
  131. FUNCTION {new.block}
  132. { output.state before.all =
  133.     'skip$
  134.     { after.block 'output.state := }
  135.   if$
  136. }
  137.  
  138. FUNCTION {new.sentence}
  139. { output.state after.block =
  140.     'skip$
  141.     { output.state before.all =
  142.     'skip$
  143.     { after.sentence 'output.state := }
  144.       if$
  145.     }
  146.   if$
  147. }
  148.  
  149. FUNCTION {not}
  150. {   { #0 }
  151.     { #1 }
  152.   if$
  153. }
  154.  
  155. FUNCTION {and}
  156. {   'skip$
  157.     { pop$ #0 }
  158.   if$
  159. }
  160.  
  161. FUNCTION {or}
  162. {   { pop$ #1 }
  163.     'skip$
  164.   if$
  165. }
  166.  
  167. FUNCTION {new.block.checka}
  168. { empty$
  169.     'skip$
  170.     'new.block
  171.   if$
  172. }
  173.  
  174. FUNCTION {new.block.checkb}
  175. { empty$
  176.   swap$ empty$
  177.   and
  178.     'skip$
  179.     'new.block
  180.   if$
  181. }
  182.  
  183. FUNCTION {new.sentence.checka}
  184. { empty$
  185.     'skip$
  186.     'new.sentence
  187.   if$
  188. }
  189.  
  190. FUNCTION {new.sentence.checkb}
  191. { empty$
  192.   swap$ empty$
  193.   and
  194.     'skip$
  195.     'new.sentence
  196.   if$
  197. }
  198.  
  199. FUNCTION {field.or.null}
  200. { duplicate$ empty$
  201.     { pop$ "" }
  202.     'skip$
  203.   if$
  204. }
  205.  
  206. FUNCTION {emphasize}
  207. { duplicate$ empty$
  208.     { pop$ "" }
  209.     { "{\em " swap$ * "}" * }
  210.   if$
  211. }
  212.  
  213. INTEGERS { nameptr namesleft numnames }
  214.  
  215. FUNCTION {format.names}
  216. { 's :=
  217.   #1 'nameptr :=
  218.   s num.names$ 'numnames :=
  219.   numnames 'namesleft :=
  220.     { namesleft #0 > }
  221.     {
  222. % the original format line: makes "J. D. Smith". TDS
  223. %   s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't := % TDS old formatting
  224. % the new format line: makes "Smith, J. D.". TDS
  225. %   s nameptr "{vv}{ll}{, jj}{, f.}" format.name$ 't := % TDS new formatting
  226. % note, no ~ so that the format is straight for NAR.
  227.  
  228.    straightnames #0 =
  229.    { s nameptr "{vv}{ll}{, jj}{, f.}" format.name$ 't := }% TDS
  230.    { s nameptr "{ff{ }}{vv}{ ll}{, jj}" format.name$ 't := }% TDS
  231.    if$
  232.  
  233.       nameptr #1 >
  234.     { namesleft #1 >
  235.         { ", " * t * }
  236.         { numnames #2 >
  237.         { "," * }
  238.         'skip$
  239.           if$
  240.           t "others" =
  241. %        { " et~al." * } % TDS
  242.         { " et al." * } % TDS no ~
  243.         { " and " * t * }
  244.           if$
  245.         }
  246.       if$
  247.     }
  248.     't
  249.       if$
  250.       nameptr #1 + 'nameptr :=
  251.       namesleft #1 - 'namesleft :=
  252.     }
  253.   while$
  254. }
  255.  
  256. FUNCTION {format.authors}
  257. { author empty$
  258.     { "" }
  259.     { author format.names }
  260.   if$
  261. }
  262.  
  263. FUNCTION {format.editors}
  264. {
  265.  #1 'straightnames := % names go as J. B. Smith for editors
  266.  editor empty$
  267.     { "" }
  268.     { editor format.names
  269.       editor num.names$ #1 >
  270.     { ", (ed.)" * }
  271.     { ", (ed.)" * }
  272. %    { ", editors" * }
  273. %    { ", editor" * }
  274.       if$
  275.     }
  276.   if$
  277.  #0 'straightnames := % names go as Smith, J. B. again
  278. }
  279.  
  280. FUNCTION {format.title}
  281. { title empty$
  282.     { "" }
  283.     { title "t" change.case$ }
  284.   if$
  285. }
  286.  
  287. FUNCTION {n.dashify}
  288. { 't :=
  289.   ""
  290.     { t empty$ not }
  291.     { t #1 #1 substring$ "-" =
  292.     { t #1 #2 substring$ "--" = not
  293.         { "--" *
  294.           t #2 global.max$ substring$ 't :=
  295.         }
  296.         {   { t #1 #1 substring$ "-" = }
  297.         { "-" *
  298.           t #2 global.max$ substring$ 't :=
  299.         }
  300.           while$
  301.         }
  302.       if$
  303.     }
  304.     { t #1 #1 substring$ *
  305.       t #2 global.max$ substring$ 't :=
  306.     }
  307.       if$
  308.     }
  309.   while$
  310. }
  311.  
  312. FUNCTION {format.date}
  313. { year empty$
  314.     { month empty$
  315.     { "" }
  316.     { "there's a month but no year in " cite$ * warning$
  317.       month
  318.     }
  319.       if$
  320.     }
  321.     { month empty$
  322. %    'year originally
  323.     {"(" year ")" * * } % TDS
  324.     { month " " * year * }
  325.       if$
  326.     }
  327.   if$
  328. }
  329.  
  330. FUNCTION {format.btitle}
  331. { title %emphasize not for NAR! TDS
  332. }
  333.  
  334. FUNCTION {tie.or.space.connect}
  335. { duplicate$ text.length$ #3 <
  336.     { "~" }
  337.     { " " }
  338.   if$
  339.   swap$ * *
  340. }
  341.  
  342. FUNCTION {either.or.check}
  343. { empty$
  344.     'pop$
  345.     { "can't use both " swap$ * " fields in " * cite$ * warning$ }
  346.   if$
  347. }
  348.  
  349. FUNCTION {format.bvolume}
  350. { volume empty$
  351.     { "" }
  352. %    { "volume" volume tie.or.space.connect % TDS
  353.     { "volume" "{\bf " volume "}, " * * tie.or.space.connect
  354.     % TDS add a comma and bold
  355.       series empty$
  356.     'skip$
  357.     %{ " of " * series emphasize * } TDS
  358.     { " of " * series  } % TDS book titles not emphasized for NAR
  359.       if$
  360.       "volume and number" number either.or.check
  361.     }
  362.   if$
  363. }
  364.  
  365. FUNCTION {format.number.series}
  366. { volume empty$
  367.     { number empty$
  368.     { series field.or.null }
  369.     { output.state mid.sentence =
  370.         { "number" }
  371.         { "Number" }
  372.       if$
  373.       number tie.or.space.connect
  374.       series empty$
  375.         { "there's a number but no series in " cite$ * warning$ }
  376.         { " in " * series * }
  377.       if$
  378.     }
  379.       if$
  380.     }
  381.     { "" }
  382.   if$
  383. }
  384.  
  385. FUNCTION {format.edition}
  386. { edition empty$
  387.     { "" }
  388.     { output.state mid.sentence =
  389.     { " " edition * "l" change.case$ " edition" * } % TDS add space before
  390.     { " " edition * "t" change.case$ " edition" * } % TDS add space before
  391.       if$
  392.     }
  393.   if$
  394. }
  395.  
  396. INTEGERS { multiresult }
  397.  
  398. FUNCTION {multi.page.check}
  399. { 't :=
  400.   #0 'multiresult :=
  401.     { multiresult not
  402.       t empty$ not
  403.       and
  404.     }
  405.     { t #1 #1 substring$
  406.       duplicate$ "-" =
  407.       swap$ duplicate$ "," =
  408.       swap$ "+" =
  409.       or or
  410.     { #1 'multiresult := }
  411.     { t #2 global.max$ substring$ 't := }
  412.       if$
  413.     }
  414.   while$
  415.   multiresult
  416. }
  417.  
  418. FUNCTION {format.pages}
  419. { pages empty$
  420.     { "" }
  421.     { pages multi.page.check
  422. %    { "pages" pages n.dashify tie.or.space.connect } % TDS
  423. %    { "page" pages tie.or.space.connect } % TDS
  424.     { "pp." pages n.dashify tie.or.space.connect } % TDS
  425.     { "p." pages tie.or.space.connect } % TDS
  426.       if$
  427.     }
  428.   if$
  429. }
  430.  
  431. FUNCTION {format.vol.num.pages}
  432. %{ volume * field.or.null
  433. { "{\bf " volume * field.or.null % TDS add boldface
  434.   number empty$
  435.     'skip$
  436.     { "(" number * ")" * *
  437.       volume empty$
  438.     { "there's a number but no volume in " cite$ * warning$ }
  439.     'skip$
  440.       if$
  441.     }
  442.   if$
  443.   pages empty$
  444.     'skip$
  445.     { duplicate$ empty$
  446.     { pop$ format.pages }
  447. %    { ":" * pages n.dashify * } % TDS remove colon!
  448.     { "}, " * pages n.dashify * } % TDS replace colon with a comma
  449.         % TDS add a boldface
  450.       if$
  451.     }
  452.   if$
  453. }
  454.  
  455. FUNCTION {format.chapter.pages}
  456. { chapter empty$
  457.     'format.pages
  458.     { type empty$
  459.     { "chapter" }
  460.     { type "l" change.case$ }
  461.       if$
  462.       chapter tie.or.space.connect
  463.       pages empty$
  464.     'skip$
  465.     { ", " * format.pages * }
  466.       if$
  467.     }
  468.   if$
  469. }
  470.  
  471. FUNCTION {format.in.ed.booktitle}
  472. { booktitle empty$
  473.     { "" }
  474.     { editor empty$
  475.         % add colon after "In"
  476.     %{ "In " booktitle emphasize * } % TDS
  477.     %{ "In " format.editors * ", " * booktitle emphasize *
  478.     { "In " booktitle *} % TDS no emphasis in nar!
  479.     { "In " format.editors * ", " * booktitle * % TDS no emphasis in nar!
  480.            ", " * } % TDS and tack on a comma
  481.       if$
  482.     }
  483.   if$
  484. }
  485.  
  486. FUNCTION {empty.misc.check}
  487. { author empty$ title empty$ howpublished empty$
  488.   month empty$ year empty$ note empty$
  489.   and and and and and
  490.     { "all relevant fields are empty in " cite$ * warning$ }
  491.     'skip$
  492.   if$
  493. }
  494.  
  495. FUNCTION {format.thesis.type}
  496. { type empty$
  497.     'skip$
  498.     { pop$
  499.       type "t" change.case$
  500.     }
  501.   if$
  502. }
  503.  
  504. FUNCTION {format.tr.number}
  505. { type empty$
  506.     { "Technical Report" }
  507.     'type
  508.   if$
  509.   number empty$
  510.     { "t" change.case$ }
  511.     { number tie.or.space.connect }
  512.   if$
  513. }
  514.  
  515. FUNCTION {format.article.crossref}
  516. { key empty$
  517.     { journal empty$
  518.     { "need key or journal for " cite$ * " to crossref " * crossref *
  519.       warning$
  520.       ""
  521.     }
  522.     { "In {\em " journal * "\/}" * } % TDS
  523.       if$
  524.     }
  525.     { "In " key * } % TDS
  526.   if$
  527.   " \cite{" * crossref * "}" *
  528. }
  529.  
  530. FUNCTION {format.crossref.editor}
  531. { editor #1 "{vv~}{ll}" format.name$
  532.   editor num.names$ duplicate$
  533.   #2 >
  534.     { pop$ " et~al." * }
  535.     { #2 <
  536.     'skip$
  537.     { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
  538.         { " et~al." * }
  539.         { " and " * editor #2 "{vv~}{ll}" format.name$ * }
  540.       if$
  541.     }
  542.       if$
  543.     }
  544.   if$
  545. }
  546.  
  547. FUNCTION {format.book.crossref}
  548. { volume empty$
  549.     { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
  550.       "In " % TDS
  551.     }
  552.     { "Volume" volume tie.or.space.connect
  553.       " of " *
  554.     }
  555.   if$
  556.   editor empty$
  557.   editor field.or.null author field.or.null =
  558.   or
  559.     { key empty$
  560.     { series empty$
  561.         { "need editor, key, or series for " cite$ * " to crossref " *
  562.           crossref * warning$
  563.           "" *
  564.         }
  565.         { "{\em " * series * "\/}" * }
  566.       if$
  567.     }
  568.     { key * }
  569.       if$
  570.     }
  571.     { format.crossref.editor * }
  572.   if$
  573.   " \cite{" * crossref * "}" *
  574. }
  575.  
  576. FUNCTION {format.incoll.inproc.crossref}
  577. { editor empty$
  578.   editor field.or.null author field.or.null =
  579.   or
  580.     { key empty$
  581.     { booktitle empty$
  582.         { "need editor, key, or booktitle for " cite$ * " to crossref " *
  583.           crossref * warning$
  584.           ""
  585.         }
  586.         { "In " booktitle * } % TDS
  587.       if$
  588.     }
  589.     { "In " key * } % TDS
  590.       if$
  591.     }
  592.     { "In " format.crossref.editor * } % TDS
  593.   if$
  594.   " \cite{" * crossref * "}" *
  595. }
  596.  
  597. FUNCTION {article}
  598. { output.bibitem
  599.   format.authors "author" output.check
  600.   format.date "year" output.check % TDS move date to here
  601.   new.block
  602. %  format.title "title" output.check % TDS NO TITLES
  603. %  new.block
  604.   crossref missing$
  605.     { journal emphasize "journal" output.check
  606.       format.vol.num.pages output
  607. %      format.date "year" output.check % TDS move date
  608.     }
  609.     { format.article.crossref output.nonnull
  610.       format.pages output
  611.     }
  612.   if$
  613.   new.block
  614.   note output
  615.   fin.entry
  616. }
  617.  
  618. FUNCTION {book}
  619. { output.bibitem
  620.   author empty$
  621.     { format.editors "author and editor" output.check }
  622.     { format.authors output.nonnull
  623.       crossref missing$
  624.     { "author and editor" editor either.or.check }
  625.     'skip$
  626.       if$
  627.     }
  628.   if$
  629.  
  630.   format.date "year" output.check % TDS new location
  631.   new.block
  632.   #1 'doblank := % remove blanks TDS
  633.   format.btitle "title" output.check
  634.   ", " output % give it a comma after the title TDS
  635.   crossref missing$
  636.     { format.bvolume output
  637.       new.block
  638.       format.number.series output
  639.       new.sentence
  640.       publisher "publisher" output.check
  641.       ", " output % give it a comma after the publisher TDS
  642.       address output
  643.     }
  644.     { new.block
  645.       format.book.crossref output.nonnull
  646.     }
  647.   if$
  648.   format.edition output
  649. %  format.date "year" output.check % TDS former location
  650.   new.block
  651.   note output
  652.   fin.entry
  653.   #0 'doblank := % blanks again TDS
  654. }
  655.  
  656. FUNCTION {booklet}
  657. { output.bibitem
  658.   format.authors output
  659.   new.block
  660.   format.title "title" output.check
  661.   howpublished address new.block.checkb
  662.   howpublished output
  663.   address output
  664.   format.date output
  665.   new.block
  666.   note output
  667.   fin.entry
  668. }
  669.  
  670. FUNCTION {inbook}
  671. { output.bibitem
  672.   author empty$
  673.     { format.editors "author and editor" output.check }
  674.     { format.authors output.nonnull
  675.       crossref missing$
  676.     { "author and editor" editor either.or.check }
  677.     'skip$
  678.       if$
  679.     }
  680.   if$
  681.   new.block
  682.   format.btitle "title" output.check
  683.   crossref missing$
  684.     { format.bvolume output
  685.       format.chapter.pages "chapter and pages" output.check
  686.       new.block
  687.       format.number.series output
  688.       new.sentence
  689.       publisher "publisher" output.check
  690.       address output
  691.     }
  692.     { format.chapter.pages "chapter and pages" output.check
  693.       new.block
  694.       format.book.crossref output.nonnull
  695.     }
  696.   if$
  697.   format.edition output
  698.   format.date "year" output.check
  699.   new.block
  700.   note output
  701.   fin.entry
  702. }
  703.  
  704. FUNCTION {incollection}
  705. { output.bibitem
  706.   format.authors "author" output.check
  707.   format.date "year" output.check % TDS
  708.   new.block
  709.   format.title "title" output.check
  710.   new.block
  711.   crossref missing$
  712.     { format.in.ed.booktitle "booktitle" output.check
  713.       format.bvolume output
  714.       format.number.series output
  715.       format.chapter.pages output
  716.       new.sentence
  717.       publisher "publisher" output.check
  718.       address output
  719.       format.edition output
  720. %      format.date "year" output.check % TDS
  721.     }
  722.     { format.incoll.inproc.crossref output.nonnull
  723.       format.chapter.pages output
  724.     }
  725.   if$
  726.   new.block
  727.   note output
  728.   fin.entry
  729. }
  730.  
  731. FUNCTION {inproceedings}
  732. { output.bibitem
  733.   format.authors "author" output.check
  734.   format.date "year" output.check % TDS
  735.   new.block
  736. %  format.title "title" output.check % TDS NO TITLE
  737. %  new.block
  738.   crossref missing$
  739.     { format.in.ed.booktitle "booktitle" output.check
  740.       format.bvolume output
  741.       format.number.series output
  742. %      format.pages output % TDS pages go at the end
  743.       address empty$
  744.     { organization publisher new.sentence.checkb
  745.       organization output
  746.       ": "  output % TDS put a colon
  747.       publisher output
  748. %      format.date "year" output.check
  749.     }
  750.     { address output.nonnull
  751. %      format.date "year" output.check
  752.       new.sentence
  753.           #1 'doblank := % remove blanks
  754.       organization output
  755.       ": "  output % TDS put a colon after the location
  756. %zzz
  757.       publisher output
  758.       ". "  output % TDS put a period after the publisher
  759.           #0 'doblank := % put back blanks
  760.     }
  761.       if$
  762.     }
  763.     { format.incoll.inproc.crossref output.nonnull
  764. %      format.pages output % TDS pages go at the end
  765.     }
  766.   if$
  767.   new.block
  768.   note output
  769.   format.pages output % TDS pages go at the end
  770.   fin.entry
  771. }
  772.  
  773. FUNCTION {conference} { inproceedings }
  774.  
  775. FUNCTION {manual}
  776. { output.bibitem
  777.   author empty$
  778.     { organization empty$
  779.     'skip$
  780.     { organization output.nonnull
  781.       address output
  782.     }
  783.       if$
  784.     }
  785.     { format.authors output.nonnull }
  786.   if$
  787.   new.block
  788.   format.btitle "title" output.check
  789.   author empty$
  790.     { organization empty$
  791.     { address new.block.checka
  792.       address output
  793.     }
  794.     'skip$
  795.       if$
  796.     }
  797.     { organization address new.block.checkb
  798.       organization output
  799.       address output
  800.     }
  801.   if$
  802.   format.edition output
  803.   format.date output
  804.   new.block
  805.   note output
  806.   fin.entry
  807. }
  808.  
  809. FUNCTION {mastersthesis}
  810. { output.bibitem
  811.   format.authors "author" output.check
  812.   new.block
  813.   format.title "title" output.check
  814.   new.block
  815.   "Master's thesis" format.thesis.type output.nonnull
  816.   school "school" output.check
  817.   address output
  818.   format.date "year" output.check
  819.   new.block
  820.   note output
  821.   fin.entry
  822. }
  823.  
  824. FUNCTION {misc}
  825. { output.bibitem
  826.   format.authors output
  827.   title howpublished new.block.checkb
  828.   format.title output
  829.   howpublished new.block.checka
  830.   howpublished output
  831.   format.date output
  832.   new.block
  833.   note output
  834.   fin.entry
  835.   empty.misc.check
  836. }
  837.  
  838. FUNCTION {phdthesis}
  839. { output.bibitem
  840.   format.authors "author" output.check
  841.   new.block
  842.   format.btitle "title" output.check
  843.   new.block
  844.   "PhD thesis" format.thesis.type output.nonnull
  845.   school "school" output.check
  846.   address output
  847.   format.date "year" output.check
  848.   new.block
  849.   note output
  850.   fin.entry
  851. }
  852.  
  853. FUNCTION {proceedings}
  854. { output.bibitem
  855.   editor empty$
  856.     { organization output }
  857.     { format.editors output.nonnull }
  858.   if$
  859.   new.block
  860.   format.btitle "title" output.check
  861.   format.bvolume output
  862.   format.number.series output
  863.   address empty$
  864.     { editor empty$
  865.     { publisher new.sentence.checka }
  866.     { organization publisher new.sentence.checkb
  867.       organization output
  868.     }
  869.       if$
  870.       publisher output
  871.       format.date "year" output.check
  872.     }
  873.     { address output.nonnull
  874.       format.date "year" output.check
  875.       new.sentence
  876.       editor empty$
  877.     'skip$
  878.     { organization output }
  879.       if$
  880.       publisher output
  881.     }
  882.   if$
  883.   new.block
  884.   note output
  885.   fin.entry
  886. }
  887.  
  888. FUNCTION {techreport}
  889. { output.bibitem
  890.   format.authors "author" output.check
  891.   new.block
  892.   format.title "title" output.check
  893.   new.block
  894.   format.tr.number output.nonnull
  895.   institution "institution" output.check
  896.   address output
  897.   format.date "year" output.check
  898.   new.block
  899.   note output
  900.   fin.entry
  901. }
  902.  
  903. FUNCTION {unpublished}
  904. { output.bibitem
  905.   format.authors "author" output.check
  906.   new.block
  907.   format.title "title" output.check
  908.   new.block
  909.   note "note" output.check
  910.   format.date output
  911.   fin.entry
  912. }
  913.  
  914. FUNCTION {default.type} { misc }
  915.  
  916. MACRO {jan} {"January"}
  917.  
  918. MACRO {feb} {"February"}
  919.  
  920. MACRO {mar} {"March"}
  921.  
  922. MACRO {apr} {"April"}
  923.  
  924. MACRO {may} {"May"}
  925.  
  926. MACRO {jun} {"June"}
  927.  
  928. MACRO {jul} {"July"}
  929.  
  930. MACRO {aug} {"August"}
  931.  
  932. MACRO {sep} {"September"}
  933.  
  934. MACRO {oct} {"October"}
  935.  
  936. MACRO {nov} {"November"}
  937.  
  938. MACRO {dec} {"December"}
  939.  
  940. MACRO {acmcs} {"ACM Computing Surveys"}
  941.  
  942. MACRO {acta} {"Acta Informatica"}
  943.  
  944. MACRO {cacm} {"Communications of the ACM"}
  945.  
  946. MACRO {ibmjrd} {"IBM Journal of Research and Development"}
  947.  
  948. MACRO {ibmsj} {"IBM Systems Journal"}
  949.  
  950. MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
  951.  
  952. MACRO {ieeetc} {"IEEE Transactions on Computers"}
  953.  
  954. MACRO {ieeetcad}
  955.  {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
  956.  
  957. MACRO {ipl} {"Information Processing Letters"}
  958.  
  959. MACRO {jacm} {"Journal of the ACM"}
  960.  
  961. MACRO {jcss} {"Journal of Computer and System Sciences"}
  962.  
  963. MACRO {scp} {"Science of Computer Programming"}
  964.  
  965. MACRO {sicomp} {"SIAM Journal on Computing"}
  966.  
  967. MACRO {tocs} {"ACM Transactions on Computer Systems"}
  968.  
  969. MACRO {tods} {"ACM Transactions on Database Systems"}
  970.  
  971. MACRO {tog} {"ACM Transactions on Graphics"}
  972.  
  973. MACRO {toms} {"ACM Transactions on Mathematical Software"}
  974.  
  975. MACRO {toois} {"ACM Transactions on Office Information Systems"}
  976.  
  977. MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
  978.  
  979. MACRO {tcs} {"Theoretical Computer Science"}
  980.  
  981. READ
  982.  
  983. STRINGS { longest.label }
  984.  
  985. INTEGERS { number.label longest.label.width }
  986.  
  987. FUNCTION {initialize.longest.label}
  988. { "" 'longest.label :=
  989.   #1 'number.label :=
  990.   #0 'longest.label.width :=
  991. }
  992.  
  993. FUNCTION {longest.label.pass}
  994. { number.label int.to.str$ 'label :=
  995.   number.label #1 + 'number.label :=
  996.   label width$ longest.label.width >
  997.     { label 'longest.label :=
  998.       label width$ 'longest.label.width :=
  999.     }
  1000.     'skip$
  1001.   if$
  1002. }
  1003.  
  1004. EXECUTE {initialize.longest.label}
  1005.  
  1006. ITERATE {longest.label.pass}
  1007.  
  1008. FUNCTION {begin.bib}
  1009. { preamble$ empty$
  1010.     'skip$
  1011.     { preamble$ write$ newline$ }
  1012.   if$
  1013.   "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
  1014. }
  1015.  
  1016. EXECUTE {begin.bib}
  1017.  
  1018. EXECUTE {init.state.consts}
  1019.  
  1020. ITERATE {call.type$}
  1021.  
  1022. FUNCTION {end.bib}
  1023. { newline$
  1024.   "\end{thebibliography}" write$ newline$
  1025. }
  1026.  
  1027. EXECUTE {end.bib}
  1028.